package com.server.service.data;

import java.util.List;

import com.client.service.data.ProduitDataService;
import com.google.appengine.api.datastore.EntityNotFoundException;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.server.store.PoolManager;
import com.server.store.data.ApporteurManager;
import com.server.store.data.ProduitManager;
import com.shared.context.User;
import com.shared.data.TypeIData;
import com.shared.model.Apporteur;
import com.shared.model.Compagnie;
import com.shared.model.Produit;
/**
 * Implémentation du service de gestion des {@link Produit}
 * @author queyroi
 *
 */
public class ProduitDataServiceImpl extends RemoteServiceServlet implements ProduitDataService {

	public String delete(Produit produit) throws IllegalArgumentException {
		checkCurrentIsAdministrator();
		checkInput(produit);
		((ProduitManager) PoolManager.get().getDataManager(TypeIData.PRODUIT)).delete(produit);
		return "sucess";
	}

	public List getList() throws IllegalArgumentException {
		checkCurrentIsAdministrator();
		return ((ProduitManager) PoolManager.get().getDataManager(TypeIData.PRODUIT)).getList();
	}

	public String save(Produit produit) throws IllegalArgumentException {
		checkCurrentIsAdministrator();
		checkInput(produit);
		
		((ProduitManager) PoolManager.get().getDataManager(TypeIData.PRODUIT)).save(produit);
		return "sucess";
	}

	public String update(Produit produit) throws IllegalArgumentException {
		checkCurrentIsAdministrator();
		checkInput(produit);
		((ProduitManager) PoolManager.get().getDataManager(TypeIData.PRODUIT)).update(produit);
		return "sucess";
	}
	
	public void checkInput(Object obj) throws IllegalArgumentException{
		if(obj==null) throw new IllegalArgumentException("Echec d'enregistrement : vérifier les paramètres");
	}
	
	public void checkCurrentIsAdministrator() throws IllegalArgumentException{
		if(!((User) getThreadLocalRequest().getSession().getAttribute("user")).isAdministrator()) throw new IllegalArgumentException("Seul un administrateur est autorisé à réalisé cette opération");
	}

	public Compagnie getCompagnie(Produit produit){
		checkCurrentIsAdministrator();
		checkInput(produit);	
		
		try {
			return ((ProduitManager) PoolManager.get().getDataManager(TypeIData.PRODUIT)).getCompagnie(produit);
		} catch (EntityNotFoundException e) {
			throw new IllegalArgumentException("Aucune compagnie liée à ce produit");
		}
	}

}
